home *** CD-ROM | disk | FTP | other *** search
- /*
- * $Id: libnet-asn1.h,v 1.3 2004/01/17 07:51:19 mike Exp $
- *
- * libnet-asn1.h - Network routine library ASN.1 header file
- *
- * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
- * All rights reserved.
- *
- * Definitions for Abstract Syntax Notation One, ASN.1
- * As defined in ISO/IS 8824 and ISO/IS 8825
- *
- * Copyright 1988, 1989 by Carnegie Mellon University
- * All rights reserved.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of CMU not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- *
- * Copyright (c) 1998 - 2001 Mike D. Schiffman <mike@infonexus.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
- #ifndef __LIBNET_ASN1_H
- #define __LIBNET_ASN1_H
-
- #ifndef EIGHTBIT_SUBIDS
- typedef u_int32_t oid;
- #define MAX_SUBID 0xFFFFFFFF
- #else
- typedef u_int8_t oid;
- #define MAX_SUBID 0xFF
- #endif
-
- #define MAX_OID_LEN 64 /* max subid's in an oid */
-
- #define ASN_BOOLEAN (0x01)
- #define ASN_INTEGER (0x02)
- #define ASN_BIT_STR (0x03)
- #define ASN_OCTET_STR (0x04)
- #define ASN_NULL (0x05)
- #define ASN_OBJECT_ID (0x06)
- #define ASN_SEQUENCE (0x10)
- #define ASN_SET (0x11)
-
- #define ASN_UNIVERSAL (0x00)
- #define ASN_APPLICATION (0x40)
- #define ASN_CONTEXT (0x80)
- #define ASN_PRIVATE (0xC0)
-
- #define ASN_PRIMITIVE (0x00)
- #define ASN_CONSTRUCTOR (0x20)
-
- #define ASN_LONG_LEN (0x80)
- #define ASN_EXTENSION_ID (0x1F)
- #define ASN_BIT8 (0x80)
-
- #define IS_CONSTRUCTOR(byte) ((byte) & ASN_CONSTRUCTOR)
- #define IS_EXTENSION_ID(byte) (((byte) & ASN_EXTENSION_ID) = ASN_EXTENSION_ID)
-
- /*
- * All of the build_asn1_* (build_asn1_length being an exception) functions
- * take the same first 3 arguments:
- *
- * u_int8_t *data: This is a pointer to the start of the data object to be
- * manipulated.
- * int *datalen: This is a pointer to the number of valid bytes following
- * "data". This should be not be exceeded in any function.
- * Upon exiting a function, this value will reflect the
- * changed "data" and then refer to the new number of valid
- * bytes until the end of "data".
- * u_int8_t type: The ASN.1 object type.
- */
-
-
- /*
- * Builds an ASN object containing an integer.
- *
- * Returns NULL upon error or a pointer to the first byte past the end of
- * this object (the start of the next object).
- */
-
- u_int8_t *
- libnet_build_asn1_int(
- u_int8_t *, /* Pointer to the output buffer */
- int *, /* Number of valid bytes left in the buffer */
- u_int8_t, /* ASN object type */
- int32_t *, /* Pointer to a int32_t integer */
- int /* Size of a int32_t integer */
- );
-
-
- /*
- * Builds an ASN object containing an unsigned integer.
- *
- * Returns NULL upon error or a pointer to the first byte past the end of
- * this object (the start of the next object).
- */
-
- u_int8_t *
- libnet_build_asn1_uint(
- u_int8_t *, /* Pointer to the output buffer */
- int *, /* Number of valid bytes left in the buffer */
- u_int8_t, /* ASN object type */
- u_int32_t *, /* Pointer to an unsigned int32_t integer */
- int /* Size of a int32_t integer */
- );
-
-
- /*
- * Builds an ASN object containing an octect string.
- *
- * Returns NULL upon error or a pointer to the first byte past the end of
- * this object (the start of the next object).
- */
-
- u_int8_t *
- libnet_build_asn1_string(
- u_int8_t *, /* Pointer to the output buffer */
- int *, /* Number of valid bytes left in the buffer */
- u_int8_t, /* ASN object type */
- u_int8_t *, /* Pointer to a string to be built into an object */
- int /* Size of the string */
- );
-
-
- /*
- * Builds an ASN header for an object with the ID and length specified. This
- * only works on data types < 30, i.e. no extension octets. The maximum
- * length is 0xFFFF;
- *
- * Returns a pointer to the first byte of the contents of this object or
- * NULL upon error
- */
-
- u_int8_t *
- libnet_build_asn1_header(
- u_int8_t *, /* Pointer to the start of the object */
- int *, /* Number of valid bytes left in buffer */
- u_int8_t, /* ASN object type */
- int /* ASN object length */
- );
-
-
- u_int8_t *
- libnet_build_asn1_length(
- u_int8_t *, /* Pointer to start of object */
- int *, /* Number of valid bytes in buffer */
- int /* Length of object */
- );
-
-
- /*
- * Builds an ASN header for a sequence with the ID and length specified.
- *
- * This only works on data types < 30, i.e. no extension octets.
- * The maximum length is 0xFFFF;
- *
- * Returns a pointer to the first byte of the contents of this object.
- * Returns NULL on any error.
- */
-
- u_int8_t *
- libnet_build_asn1_sequence(
- u_int8_t *,
- int *,
- u_int8_t,
- int
- );
-
-
- /*
- * Builds an ASN object identifier object containing the input string.
- *
- * Returns NULL upon error or a pointer to the first byte past the end of
- * this object (the start of the next object).
- */
-
- u_int8_t *
- libnet_build_asn1_objid(
- u_int8_t *,
- int *,
- u_int8_t,
- oid *,
- int
- );
-
-
- /*
- * Builds an ASN null object.
- *
- * Returns NULL upon error or a pointer to the first byte past the end of
- * this object (the start of the next object).
- */
-
- u_int8_t *
- libnet_build_asn1_null(
- u_int8_t *,
- int *,
- u_int8_t
- );
-
-
- /*
- * Builds an ASN bitstring.
- *
- * Returns NULL upon error or a pointer to the first byte past the end of
- * this object (the start of the next object).
- */
-
- u_int8_t *
- libnet_build_asn1_bitstring(
- u_int8_t *,
- int *,
- u_int8_t,
- u_int8_t *, /* Pointer to the input buffer */
- int /* Length of the input buffer */
- );
-
-
- #endif /* __LIBNET_ASN1_H */
-
- /* EOF */
-